Fiber optics have enabled the transmission of long strings of data in a serial fashion from a driver to a receiver over long distances (typically measured in kilometers) at very high data rates (typically specified in billions of bits per second). This is in contrast to more traditional communication over electrical wires which only allow data to be transmitted for relatively short distances at these high data rates. The distances for communication over wire means is typically in the range of several tens of meters.
Fiber optic data transmission is however inherently noisy in that bit errors in the data are frequent. Error rates of one in a trillion or even one in a billion bits are common. Various checking methods including cyclic redundancy codes are used to detect these errors.
Several methods have been suggested for recovering data that has been transmitted but received with error indications. One method is to employ a high level protocol that keeps track of the time from request to response. Each time a request is sent from one side of the fiber optic link to the other, the sender starts a timer. If a response is not received within a specified time, the sender "assumes" that either the request or the response was lost. The sender then requests status from the other end of the link to determine if the request should be resent.
Another method of recovering data received in error is to package the data into frames and to assign a sequence number to each frame. If a receiver detects a frame with a sequence number that is out of order, it assumes that one or more frames were lost. Using the sequence number of the last correctly received frame, the receiver then requests the lost frames to be retransmitted. This method allows multiple requests and responses to be on the link at the same time, thus improving the utilization.
However, using timers to detect damaged data, as described above, is inefficient since the time period chosen has to be long enough to allow the slowest anticipated response. The problem with the other suggested solution using sequence numbers is that sequence numbers add complexity to the transmission and reception hardware.
Thus, what is needed is an improved method for determining which data frame is damaged by bit errors. This method should be fast and it should not disturb traffic on the same link due to other non-related operations typically present in a multiplexing environment.